package com.atao.baokede.mapper;

import com.atao.baokede.pojo.Review;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

@Mapper
public interface ReviewMapper {

    /**
     * 插入评论
     */
    @Insert("INSERT INTO review(user_id, item_id, parent_id, content, score, create_time, level) " +
            "VALUES(#{userId}, #{itemId}, #{parentId}, #{content}, #{score}, #{createTime}, #{level})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insert(Review review);

    /**
     * 根据ID查询评论
     */
    @Select("SELECT * FROM review WHERE id = #{id}")
    Review findById(Long id);

    /**
     * 删除评论
     */
    @Delete("DELETE FROM review WHERE id = #{id}")
    void deleteById(Long id);

    /**
     * 更新评论
     */
    @Update("UPDATE review SET content = #{content} WHERE id = #{id}")
    void update(Review review);

    /**
     * 查询商品的所有主评论（一级评论）
     */
    List<Review> findMainReviewsByItemId(Long itemId);

    /**
     * 查询评论的所有子评论（二级和三级评论）
     */
    List<Review> findRepliesByParentId(Long parentId);

    /**
     * 查询用户对商品的评论
     */
    List<Review> findByUserIdAndItemId(@Param("userId") Long userId, @Param("itemId") Long itemId);

    /**
     * 批量删除评论（包括子评论）
     */
    void batchDelete(@Param("ids") List<Long> ids);

    /**
     * 获取商品平均评分
     */
    Double getAverageScoreByItemId(Long itemId);

    /**
     * 获取商品评分分布
     */
    @MapKey("score")
    List<Map<String, Object>> getScoreDistributionByItemId(Long itemId);
}
